/*************************************************************************
    > File Name: student.c
    > Author: ma6174
    > Mail: ma6174@163.com 
    > Created Time: 2022年10月01日 星期六 16时58分35秒
 ************************************************************************/

#include "buffer.h"



void keyboards()//录入学生信息子函数（从键盘录入）
{
  int i;
  struct student * incouse;
  N2=0;
  incouse=(struct student *)malloc(sizeof(struct student));
  incouse->nelen=0;
  incouse->nelenum[0]=0;
  printf("学生学号\t学生姓名\n");
  scanf("%d%s",&incouse->num2,&incouse->name2);
  
  struct student *p0,*p1,*p2;
  p1=head2;
  p0=incouse;
  if(head2==NULL)
  {
    head2=p0;
    p0->next=NULL;
  }
  else
  {
    while((p0->num2 > p1->num2) && (p1->next!=NULL))
    {
      p2=p1;
      p1=p1->next;
    }
    if(p0->num2 <= p1->num2)
    {
      if(head2==p1) head2=p0;
      else p2->next=p0;
      p0->next=p1;
    }
    else
    {
      p1->next=p0;
      p0->next=NULL;
    }
  }
  N2=N2+1;
//  p1->nelen=0;
//  for(i=0;i<20;i++) p1->nelenum[i]=0;
//  head2=NULL;
//  while(p1->num2!=0)
//  {
//    N2=N2+1;
//    if(N2==1)head2=p1;
//    else p2->next=p1;
//    p2=p1;
//    p1=(struct student * )malloc(sizeof(struct student));
//    scanf("%d%s",&p1->num2,p1->name2);
//    p1->nelen=0;
//    for(i=0;i<20;i++) p1->nelenum[i]=0;
//  }
//  p2->next=NULL;
}
void files()//录入学生信息子函数（从文件录入）
{
  int i=0;
  FILE * fp;
  char filepath[20]; 
  struct student *p1,*p2;
  N2=0;
  printf("输入要读入的文件路径:");
  getchar();
  gets(filepath); 
  if((fp=fopen(filepath,"r"))==NULL) 
  { 
    printf("找不到%s文件!\n",filepath); 
    exit(0); 
  } 
  p1=p2=(struct student*)malloc(sizeof(struct student));
  fread(p1,sizeof(struct student),1,fp);
  head2=NULL;
  while(!feof(fp))
  {
    i=0;
    N2=N2+1;
    if(N2==1)head2=p1;
    else p2->next=p1;
    p2=p1;
    p1=(struct student * )malloc(sizeof(struct student));
    fread(p1,sizeof(struct student),1,fp);
  } 
  p2->next=NULL;
}
void inputs()//录入学生信息主函数
{
  int i;
  printf("\t\t\t录入学生信息\n");
  printf("\n1.从键盘录入\n");
  printf("2.从文件录入\n");
  printf("3.返回主菜单\n");
  printf("请选择(1~3):\n");
  scanf("%d",&i);
  switch(i)
  {
  case(1):keyboards();break;
  case(2):files();break;
  case(3):break;
  }
}
void inserts(struct student * incouse)//学生信息管理子函数(填加学生信息)
{
  struct student *p0,*p1,*p2;
  p1=head2;
  p0=incouse;
  if(head2==NULL)
  {
    head2=p0;
    p0->next=NULL;
  }
  else
  {
    while((p0->num2 > p1->num2) && (p1->next!=NULL))
    {
      p2=p1;
      p1=p1->next;
    }
    if(p0->num2 <= p1->num2)
    {
      if(head2==p1) head2=p0;
      else p2->next=p0;
      p0->next=p1;
    }
    else
    {
      p1->next=p0;
      p0->next=NULL;
    }
  }
  N2=N2+1;
}
void dels(int num2)//学生信息管理子函数（删除学生信息)
{
  struct student *p1,*p2;
  if(head2==NULL)
  {
    printf("\n没有该学生信息,无法删除!\n");
    goto end;
  }
  p1=head2;
  while(num2!=p1->num2 && p1->next!=NULL)
  {
    p2=p1;
    p1=p1->next;
  }
  if(num2==p1->num2)
  {
    if(p1==head2) head2=p1->next;
    else p2->next=p1->next;
    printf("已删除该学生信息!\n");
    N2=N2-1;
  }
  else printf("无该学号的学生!\n");
  end:;
}
void managements()//学生信息管理主函数
{
  struct student * incouse;
  int i,num2;
  printf("\t\t\t学生信息管理\n");
  printf("1.新增学生信息\n");
  printf("2.删除学生信息\n");
  printf("3.返回主菜单\n");
  printf("请选择(1~3):\n");
  scanf("%d",&i);
  switch(i)
  {
  case(1):
    {
      incouse=(struct student *)malloc(sizeof(struct student));
      incouse->nelen=0;
      incouse->nelenum[0]=0;
      printf("学生学号\t学生姓名\n");
      scanf("%d%s",&incouse->num2,incouse->name2);
      inserts(incouse);
      break;
    }
  case(2):
    {
      printf("请输入要删除学生的学号:\n");
      scanf("%d",&num2);
      dels(num2);
      break;
    }
  case(3):break;
  }
}
//student.c



void listc()//输出课程信息
{
  struct couse * p;
  p=head1;
  printf("课程编号 课程名称 学分 课程已选人数 课程人数上限\n");
  while(p!=NULL)
  {
    printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
    p=p->next;
  }
}
void lists()//输出学生信息
{
  struct student * p;
  p=head2;
  printf("学生学号 学生姓名 已选课程数量\n");
  while(p!=NULL)
  {
    printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);
    p=p->next;
  }
}
void intoc()//存储课程信息
{
  FILE * fp;
  struct couse * p;
  char filepath[30];
  printf("输入课程信息要保存的文件路径:");
  getchar();
  gets(filepath);
  if((fp=fopen(filepath,"w"))==NULL)
  {
    printf("\n保存失败!");
    exit(0);
  }
  p=head1;
  while(p!=NULL)
  {
    fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);
    p=p->next;
  }
  fclose(fp);
  printf("课程信息已保存在%s中!\n",filepath);
}
void intos()//存储学生信息
{
  FILE * fp;
  struct student * p;
  char filepath[30];
  printf("输入学生信息要保存的文件路径:");
  getchar();
  gets(filepath);
  if((fp=fopen(filepath,"w"))==NULL)
  {
    printf("\n保存失败!");
    exit(0);
  }
  p=head2;
  while(p!=NULL)
  {
  	fprintf(fp,"%d %s %d\n",p->num2,p->name2,p->nelen);
    //fwrite(p,sizeof(struct student),1,fp);
    p=p->next;
  }
  fclose(fp);
  printf("学生信息已保存在%s中!\n",filepath);
}
void into()//存储信息
{
  int i;
  printf("1.存储课程信息\n");
  printf("2.存储学生信息\n");
  printf("3.返回主菜单\n");
  printf("请输入(1~3)\n");
  scanf("%d",&i);
  switch(i)
  {
  case(1):intoc();break;
  case(2):intos();break;
  case(3):break;
  }
}
void store()//信息主函数
{
  int i;
  printf("\t\t系统信息查看及存储\n");
  printf("1.查看课程信息\n");
  printf("2.查看学生信息\n");
  printf("3.存储信息\n");
  printf("4.返回主菜单\n");
  printf("请输入(1~4):\n");
  scanf("%d",&i);
  switch(i)
  {
  case(1):listc();break;
  case(2):lists();break;
  case(3):into();break;
  case(4):break;
  }
}
//student.c


